package model

import (
	"time"
	"user_srv/basic/config"
)

type UserVip struct { //用户会员关系表
	Id         uint      `gorm:"column:id;type:bigint;comment:主键ID;primaryKey;not null;" json:"id"`                           // 主键ID
	UserId     uint      `gorm:"column:user_id;type:bigint;comment:用户ID;not null;" json:"user_id"`                            // 用户ID
	PlanId     uint      `gorm:"column:plan_id;type:int;comment:套餐ID;not null;" json:"plan_id"`                               // 套餐ID
	OrderId    uint      `gorm:"column:order_id;type:bigint;comment:订单ID（可为空）;default:NULL;" json:"order_id"`                 // 订单ID（可为空）
	StartTime  time.Time `gorm:"column:start_time;type:datetime;comment:开始时间;not null;" json:"start_time"`                    // 开始时间
	EndTime    time.Time `gorm:"column:end_time;type:datetime;comment:结束时间;not null;" json:"end_time"`                        // 结束时间
	IsActive   uint      `gorm:"column:is_active;type:tinyint;comment:是否有效：0-否 1-是;default:1;" json:"is_active"`              // 是否有效：0-否 1-是
	CreateTime time.Time `gorm:"column:create_time;type:datetime;comment:创建时间;default:CURRENT_TIMESTAMP;" json:"create_time"` // 创建时间
}
type UserVipDetail struct { //两表关联查询
	Id         uint      `json:"id"`
	UserId     uint      `json:"userId"`
	PlanId     uint      `json:"planId"`
	OrderId    uint      `json:"order_id"`
	StartTime  time.Time `json:"start_time"`
	EndTime    time.Time `json:"end_time"`
	IsActive   uint      `json:"is_active"`
	CreateTime time.Time `json:"create_time"`

	//会员套餐表字段
	PlanName    string  `json:"plan_name"`
	Description string  `json:"description"`
	Price       float64 `json:"price"`
}

func (uv *UserVip) TableName() string {
	return "user_vip"
}
func (uv *UserVip) CreateUserVip() error { //添加用户vip
	return config.DB.Create(&uv).Error
}

func (uv *UserVip) GetUserActiveVip(where *UserVip) error { //查看用户vip详情
	return config.DB.Where(where).Limit(config.Limit).Find(&uv).Error
}

func (uv *UserVip) UpdateUserVipStatus(where *UserVip) error { //更新用户vip状态
	return config.DB.Model(&uv).Where(where).Update("is_active", uv.IsActive).Error
}

func (uv *UserVip) GetUserVipDetail(where *UserVip) (*UserVipDetail, error) { // 获取用户vip详情（关联查询）
	var detail UserVipDetail
	err := config.DB.Table("user_vip uv").
		Select("uv.*,vp.plan_name,vp.description,vp.price").
		Joins("left join vip_plans vp on uv.plan_id = vp.id").
		Where(where).Limit(config.Limit).Find(&detail).Error
	return &detail, err

}
